package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.Integral;
import cn.wolfcode.trip.base.service.IIntegralService;
import cn.wolfcode.trip.base.util.JsonResult;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * Copyright: Copyright (c) 2019 Super520
 * 描述：积分明细API接口
 *
 * @package: cn.wolfcode.trip.admin.controller
 * @author: Patch
 * @date: 2019/5/30 10:02
 * 总结:
 */
@RestController
@RequestMapping("integrals")
public class IntegralController {
    @Autowired
    private IIntegralService integralService;

    /**
     * 签到接口
     * 1.资源：/integrals/sign
     * 2.方式：get
     * 3.参数：user.id（用户id）、type.id（积分类型）
     * 4.返回：JsonResult
     *
     * @return JsonResult
     */
    @GetMapping("sign")
    public Object sign(Integral integral) {
        JsonResult result = new JsonResult();
        try {
            integralService.sign(integral);
        } catch (Exception e) {
            e.printStackTrace();
            result.mark(e.getMessage());
        }
        return result;
    }

    /**
     * 查询当前用户的签到的日份以json数组格式返回
     * 格式：[{"signDay":"1"}....]
     * 1.资源：/integrals/signDay/{month}
     * 2.方式：get
     * 3.参数：user.id（用户id）、type.id（积分类型）,月
     * 4.返回：JSON数组
     */
    @GetMapping("signDay/{month}")
    public String signDay(@PathVariable("month") Integer month, Integral integral) {
        List<Map<String, Object>> maps = integralService.signDay(month, integral);
        return JSON.toJSONString(maps);
    }

    /**
     * 抽奖
     * 格式：[{"signDay":"1"}....]
     * 1.资源：/integrals
     * 2.方式：post
     * 3.参数：user.id（用户id）、type.id（积分类型）,grade(积分值)
     * 4.返回：无返回
     */
    @PostMapping
    public void lottery(Integral integral){
        integral.setRemark("用户抽奖，添加积分：" + integral.getGrade());
        integralService.saveOrUpdate(integral);
    }

    /**
     * 获取中奖名单实现抽奖的瀑布流
     * 格式：[{"signDay":"1"}....]
     * 1.资源：/integrals/roll
     * 2.方式：get
     * 3.参数：无
     * 4.返回：list集合
     */
    @GetMapping("/roll")
    public List<Integral> roll(Integral integral) {
        List<Integral> integralList = integralService.roll(integral);
        return integralList;
    }

    /**
     * 统计所有的获奖名单数量
     * 格式：[{"signDay":"1"}....]
     * 1.资源：/count
     * 2.方式：get
     * 3.参数：无
     * 4.返回：获奖名单数
     */
    @GetMapping("/count")
    public Integer count(){
        Integer count = integralService.getCount();
        return count;
    }
}
